package cn.iocoder.yudao.module.system.service.file_storage;

import cn.iocoder.yudao.framework.common.exception.ServiceException;
import cn.iocoder.yudao.module.system.controller.admin.a_pictures.vo.FileBaseVO;
import org.springframework.web.multipart.MultipartFile;

import java.io.File;
import java.io.IOException;
import java.nio.file.Paths;

/**
 * @author zyk
 */
public interface UploadService extends IStrategy {

    /**
     * 文件上传
     * @param file 文件
     * @return
     */
    public FileBaseVO upload(MultipartFile file);
    /**
     * 文件上传校验
     *
     * @param ext          文件后缀
     * @param size         文件大小
     */
    void check(String ext, Long size);

    /**
     * 大文件分片上传
     * @param chunkNumber 当前分片
     * @param chunkTotal 分片总数
     * @param file 分片文件
     * @param fileMD5 文件MD5
     * @param path 分片临时存储路径
     * @return
     */
    default Boolean uploadChunk(int chunkNumber, int chunkTotal, MultipartFile file, String fileMD5, String path){
        String chunkPath = path + "/" + fileMD5;
        String chunkFile = chunkPath + "/" + fileMD5 + ".part" + chunkNumber;
        File chunkDir = new File(chunkPath);
        if(!chunkDir.exists()){
            chunkDir.mkdirs();
        }
        Boolean bool = false;
        try {
            file.transferTo(Paths.get(chunkFile));
            bool = true;
        }catch (IOException ioException){
            throw new ServiceException(500,"系统错误!");
        }
        return bool;
    }

    /**
     * 分片合并文件
     * @param uuid 文件MD5
     * @param chunkTotal 分片总数
     * @return
     */
    FileBaseVO merge(String uuid, int chunkTotal,Long size,String ext);

}
